<?php
/**
 * 公共模型，提供基础模型方法
 * @author IIIThSoul
 *
 */
namespace Common\Model;

use Think\Model;
class CommonModel extends Model
{
    /**
     * 基础数据操作
     * 
     * @param array $data   要更新的数据，$_POST为默认值
     * @param string $type  self::MODEL_INSERT 或 self::MODEL_UPDATE, 为空根据主键是否存在进行判断
     * @return mixed        操作失败返回false，插入成功返回insertId，更新成功返回array
     */
    protected function update($data = array(), $type = '')
    {
        $state = false;
        
        /* $data为empty时以$_POST为数据进行创建 */
        $data = $this->create($data, $type);
        
        /* 数据创建失败，返回false，错误信息可以通过Model->getError()获取到 */
        if (false === $data) return false;
        
        if (empty($data[$this->getPk()])) {
            /* 数据中不存在主键时，执行添加操作 */
            $state = $this->add(); // 添加基础内容
          
            if (false === $state) {
                $this->error = 'DATA INSERT FAILED!';
                return false;
            }
            
            $state = $data;
        } else {
            /* 更新数据 */
            $state = $this->save();
            
            if (false === $state) {
                $this->error = 'DATA UPDATE FAILED';
                return false;
            }
        }
        
        return $state;
    }
    
    /**
     * 验证字段是否存在
     * @param string $key   数据库字段
     * @param mixed  $val   字段值
     * @return boolean      不存在返回true，存在返回false
     */
    protected function valid($key, $val)
    {
        return $this->where("{$key}='{$val}'")->count() <= 0;
    }
}